package com.jian.buffer;

import org.junit.Test;

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author Jiange
 * @create 2021-09-12-14:47
 */
public class BufferDemo1 {
    @Test
    public void test1() throws Exception {
        RandomAccessFile file = new RandomAccessFile("D:\\WEB\\NIO\\NIO.iml", "rw");
        FileChannel channel = file.getChannel();

        ByteBuffer buffer = ByteBuffer.allocate(1024);
        int read = channel.read(buffer);

        while(read != -1){
            buffer.flip();
            while(buffer.hasRemaining()){
                System.out.println((char) buffer.get());
                //capacity  在读和写的时候都是一样的就是buffer的大小
                //position  在读写模式是不一样的  在写入数据的时候表示写入数据的当前位置，初始值为0，读模式表示的是已经读到了当前位置 在调用
                    //flip方法的时候会被重置为0
                //limit表示
                    //在写模式的时候 limit表示buffer最多可对buffer写入多少个数据 等于capacity
                    //读模式表示buffer里面有多好个可读的数据

                //写数据的方法  用channel写入buffer  获取调用put
                //flip方法会把当前从写模式转换为读模式  把当前的position设置成0  limit设置成上一次的position
                //rewind将position设置成为0  limit保持不变
                //compact  只会清除已经读过的数据
                //mark标记buffer的一个position 之后调用reset恢复到这个position
                //分片 slice方法
                //只读缓存区  原来的缓冲区调用 asReadOnlyBuffer 和原来的缓冲区数据共享 是只读的

            }
            buffer.clear();
            read = channel.read(buffer);
        }
    }
}
